/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package com.elecciones.Servlets;

import com.elecciones.DAO.candidatosDAO;
import com.elecciones.DAO.votosDAO;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.SQLException;
import static java.util.Optional.empty;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.stream.Stream;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 *
 * @author AndresV
 */
@WebServlet(name = "respuestasAnd", urlPatterns = {"/respuestasAnd"})
public class respuestasAnd extends HttpServlet {
  
  private String respuestaOk;
  private String error;

  public String getError() {
    return error;
  }

  public void setError(String error) {
    this.error = error;
  }

  public String getRespuestaOk() {
    return respuestaOk;
  }

  public void setRespuestaOk(String respuestaOk) {
    this.respuestaOk = respuestaOk;
  }
  
  

  /**
   * Processes requests for both HTTP <code>GET</code> and <code>POST</code>
   * methods.
   *
   * @param request servlet request
   * @param response servlet response
   * @throws ServletException if a servlet-specific error occurs
   * @throws IOException if an I/O error occurs
   */
  protected void processRequest(HttpServletRequest request, HttpServletResponse response)
          throws ServletException, IOException {
    response.setContentType("text/html;charset=UTF-8");
    try (PrintWriter out = response.getWriter()) {
      /* TODO output your page here. You may use following sample code. */
      out.println("<!DOCTYPE html>");
      out.println("<html>");
      out.println("<head>");
      out.println("<title>Servlet respuestasAnd</title>");      
      out.println("</head>");
      out.println("<body>");
      out.println("<h1> " + getRespuestaOk()+ "</h1>");
      out.println("</body>");
      out.println("</html>");
    }
  }

  // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
  /**
   * Handles the HTTP <code>GET</code> method.
   *
   * @param request servlet request
   * @param response servlet response
   * @throws ServletException if a servlet-specific error occurs
   * @throws IOException if an I/O error occurs
   */
  @Override
  protected void doGet(HttpServletRequest request, HttpServletResponse response)
          throws ServletException, IOException {
    processRequest(request, response);
  }

  /**
   * Handles the HTTP <code>POST</code> method.
   *
   * @param request servlet request
   * @param response servlet response
   * @throws ServletException if a servlet-specific error occurs
   * @throws IOException if an I/O error occurs
   */
  public static boolean esEntero(String input){
    boolean parsable = true;
    try{
        Integer.parseInt(input);
    }catch(NumberFormatException e){
        parsable = false;
    }
    return parsable;
  }
  @Override
  protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
    boolean param1 = false;
    boolean param2 = false;
    boolean param3 = false;
    String errorSintaxis="";
    String[] cadenaValida = request.getParameter("andres").split(" ");
    if(cadenaValida.length==5){
      switch (cadenaValida[0]) {
        case "?":
         param1 = true;
        break;
      }
      switch (cadenaValida[1]) {
        case "votos":
         param2 = true;
        break; 
      }
      switch (cadenaValida[2]) {
        case "por":
         param3 = true;
        break;
      }
      if(param1 && param2 && param3){
       switch((cadenaValida[3])){
         case "candidato":
          if(esEntero(cadenaValida[4])){
          try {
              votosDAO voto = new votosDAO();
              String parametro = request.getParameter("andres");
              String prsXCand = voto.personasXCandidato(parametro);
              setRespuestaOk(prsXCand);
            } catch (SQLException ex) {
              Logger.getLogger(respuestasAnd.class.getName()).log(Level.SEVERE, null, ex);
            }
          }else{
           setRespuestaOk("El quinto parametro debe ser un entero");
          }
         break;
          case "ciudad":
            if(("max".equals(cadenaValida[4]))){
              try {
               votosDAO voto = new votosDAO();
               String parametro = request.getParameter("andres");
               String prsXCand[] = voto.ciudadXCandidato(parametro);
               String ciudadConsul = "ciudad con mayor votos: "+prsXCand[1]+" con "+prsXCand[0]+" votos";
               setRespuestaOk (ciudadConsul);
              } catch (SQLException ex) {
                Logger.getLogger(respuestasAnd.class.getName()).log(Level.SEVERE, null, ex);
              }
            }else{
             setRespuestaOk("Error sintaxis en quito parametro. <br>");
            }
            break;
            case "ganador":
              if(("candidato".equals(cadenaValida[4]))){
                try {
                  votosDAO voto = new votosDAO();
                  String candGanador[] = voto.candidatoGanador();
                  setRespuestaOk("El candidato ganador es "+candGanador[1]+" con: "+candGanador[0]+" votos");
                } catch (SQLException ex) {
                  Logger.getLogger(respuestasAnd.class.getName()).log(Level.SEVERE, null, ex);
                }
              }else{
               setRespuestaOk("Error sintaxis en quito parametro. <br>");
              }
            break;
            case "partido":
              if(("max".equals(cadenaValida[4]))){
                try {
                  votosDAO voto = new votosDAO();
                  String candGanador[] = voto.partidoGanador();
                  setRespuestaOk("El partido con mas votos es "+candGanador[1]+" con: "+candGanador[0]+" votos");
                } catch (SQLException ex) {
                  Logger.getLogger(respuestasAnd.class.getName()).log(Level.SEVERE, null, ex);
                }
              }else{
               setRespuestaOk("Error sintaxis en quito parametro. <br>");
              }
            break;
            case "genero":
              if(("m".equals(cadenaValida[4]))){
                try {
                  votosDAO voto = new votosDAO();
                  int genero = voto.Genero(cadenaValida[4]);
                  setRespuestaOk("Hubieron "+genero+" votos del genero Masculino");
                } catch (SQLException ex) {
                  Logger.getLogger(respuestasAnd.class.getName()).log(Level.SEVERE, null, ex);
                }
              }else if(("f".equals(cadenaValida[4]))){
                try {
                  votosDAO voto = new votosDAO();
                  int genero = voto.Genero(cadenaValida[4]);
                  setRespuestaOk("Hubieron "+genero+" votos del genero Femenino");
                } catch (SQLException ex) {
                  Logger.getLogger(respuestasAnd.class.getName()).log(Level.SEVERE, null, ex);
                }
              }else{
               setRespuestaOk("Error sintaxis en quito parametro. <br>");
              }
            break;
            default:
             setRespuestaOk("Error sintaxis en cuarto parametro. <br>");
              break;
              
        }
      }else{
          if(!param1){
            errorSintaxis +="Error sintaxis en primer parametro. <br>";
          }
          if(!param2){
            errorSintaxis +="Error sintaxis en segundo parametro. <br>";
          }
          if((!param3)){
            errorSintaxis +="Error sintaxis en terecer parametro. <br>";
          }
          setRespuestaOk(errorSintaxis);
      }
    }else{
      String validadndo = "";
      if(cadenaValida.length<5){
        validadndo="Verefique<br> Faltan Parametros";
      }else if(cadenaValida.length>5){
        validadndo="Verefique<br> Sobran Parametros";
      }
        setRespuestaOk (validadndo);
    }
    processRequest(request, response);
  }

  /**
   * Returns a short description of the servlet.
   *
   * @return a String containing servlet description
   */
  @Override
  public String getServletInfo() {
    return "Short description";
  }// </editor-fold>

}
